www.gusucode.com > 2种方案的VC++ 界面换肤模块源码程序 > 2种方案的VC++ 界面换肤模块/界面换肤模块/界面换肤模块/方案1/ChangeSkin/ChangeSkin.cpp

    // ChangeSkin.cpp : Defines the class behaviors for the application.
//
/*************************************

版权所有: 	吉林省明日科技有限公司

完成日期:	2010-09-15

项目出处:	编程词典

服务社区:	www.mingribook.com

学习社区:	www.mrbccd.com

*************************************/
#include "stdafx.h"
#include "ChangeSkin.h"
#include "ChangeSkinDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChangeSkinApp

BEGIN_MESSAGE_MAP(CChangeSkinApp, CWinApp)
	//{{AFX_MSG_MAP(CChangeSkinApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG
	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChangeSkinApp construction

CChangeSkinApp::CChangeSkinApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CChangeSkinApp object

CChangeSkinApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CChangeSkinApp initialization

BOOL CChangeSkinApp::InitInstance()
{
	AfxEnableControlContainer();

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif


	AlterSkin("./SkinOne.ski");
	//	m_LoadDll = TRUE;
/*	
	m_Instance = LoadLibrary("./SkinOne.ski");

	fCreateSkinObj CreateSkinObj=NULL;
	try
	{
		CreateSkinObj = (fCreateSkinObj)GetProcAddress(m_Instance,"CreateSkinObj"); 
	}
	catch (...)
	{
		m_LoadDll = FALSE;
	}

	if (CreateSkinObj == NULL)
		m_LoadDll = FALSE;
	else
		pSkin = CreateSkinObj();
*/

	CChangeSkinDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}
BOOL CChangeSkinApp::AlterSkin(LPCTSTR lpFileName)
{
	HINSTANCE hTemp;
	hTemp= LoadLibrary(lpFileName);	
	fCreateSkinObj CreateSkinObj=NULL;
	try
	{
		CreateSkinObj = (fCreateSkinObj)GetProcAddress(hTemp,"CreateSkinObj"); 
	}
	catch (...)
	{
		m_LoadDll = FALSE;
		return FALSE;
	}

	if (CreateSkinObj == NULL)
	{
		return FALSE;
	}
	else
	{
		if (m_LoadDll)
		{
			pSkin->Release();
			FreeLibrary(m_Instance);
		}
		m_LoadDll = TRUE;
		m_Instance = hTemp;
		pSkin = CreateSkinObj();
		return TRUE;
	}
}

int CChangeSkinApp::ExitInstance() 
{
	if  (m_LoadDll)
	{
		pSkin->Release();
		FreeLibrary(m_Instance);
	}	
	return CWinApp::ExitInstance();
}